package com.town.garden.service;

import com.town.garden.entiy.Result;
import com.town.garden.entiy.request.FaceAddRequest;
import com.town.garden.entiy.request.FaceSearchRequest;

/**
 * @Description nvr人脸接口操作接口
 * @E-mail cwm3412638@163.com
 * @Author cwm
 * @Date 2022/5/17
 */
public interface NvrFaceService {
    /**
     * 添加人脸到指定分组中
     * @param faceAddRequest
     * @return
     */
    Result addFace(FaceAddRequest faceAddRequest);

    /**
     *名单库库目标搜索，该接口搜索完后将数据放在缓存区，仅返回搜索到的目标个数，查询具体目标信息需要配合15.4.6接口获取。为了今后扩展方便和实现方便，查询时要求给定整个目标信息，字段可全部留空（默认值），一般指定"GrpId"字段查询某个
     * 	组中的所有人，给定其他字段时则进行条件搜索或模糊匹配，可进行模糊搜索的字段有：
     * Name，Country，NativePlace，IdCode，Job，Phone，Email，Domicile，Remark
     * 按照精确匹配的字段有Age、Sex。Sex见Gender_e枚举，1-男，2-女，3-所有
     * Age使用0xff 标识搜索所有，其他值搜索给定数组对应的名单信息。
     * 只允许单个名单库组查询
     * @return
     */
    Result searchFace(FaceAddRequest faceAddRequest);

    /**分页获取名单库目标信息 关联{@link NvrFaceService#searchFace(FaceAddRequest)}接口 不能单独使用
     * 该接口不能单独调用，首次调用该接口之前需要调用15.4.5接口搜索名单库组目标信息放到缓存区，否则获取不到数据，同时非简略模式下：
     * 1、如果WithImage不为0，则限制最大获取30张目标信息；2、如果WithImage为0 且WithFeature不为0，
     * 则限制最大获取500张图片目标信息
     * @param faceSearchRequest
     * @return
     */
    Result getByIndex(FaceSearchRequest faceSearchRequest);


    /**
     * 修改时目标信息时，根据Id或者MD5值对相应的目标进行修改，但Id字段和MD5必须有效，二者选一，如果有MD5，
     * 则优先选择MD5，同时每张目标信息给MD5和Id时必须统一，不能一张目标通过Id修改，另一张通过MD5修改。
     * 如果给定"Image"和"Feature"，则直接使用给定的
     * "Image"和"Feature"（注意特征值版本也需给定）修改图片，若只给定"Image"则会重新计算"Feature"，
     * 注意"Image"图片信息必须是添加到名单库组中的图片，如果不给定"Image"则
     * 只修改除"Image"和"Feature"以外的字段。请求和回应消息格式也与添加操作类似。
     * 可以只传需要修改的参数
     * @param faceAddRequest
     * @return
     */
    Result faceModify(FaceAddRequest faceAddRequest);

    /**
     * 删除目标信息
     * 删除目标信息时只需给定"Id"或者MD5字段即可，MD5字段具有更高的优先级，如果存在MD5字段则优先使用MD5
     * @param faceAddRequest
     * @return
     */
    Result faceRemove(FaceAddRequest faceAddRequest);
}
